Distributed networks (e.g., the Internet) are very common. In a distributed network, there are one or more client computers and one or more server computers. The server computers store content that is of interest to the client computers. The content includes HyperText Markup Language (HTML) pages, image files, word processing files, and other objects. In order to obtain this content, a client computer sends a request to a server computer (e.g., via a link). The request specifies a desired object residing on the server computer. The server computer replies and the object is downloaded to the client computer.
In order to facilitate faster interaction between the server computer and the client computer, client-side caching (CSC) techniques have been developed to cache objects once the objects have been downloaded. For example, when client side caching is available, the client computer may first check its cache to determine whether a copy of the specified object has already been stored locally in the cache from a previous download. If the object has already been stored in the cache, the client computer may use the cached object, rather than downloading the object again. Thus, the client computer saves time because some of the content does not need to be downloaded. This results in faster interactions between the server computer and the client computer.
In addition to increasing interaction times between the server computer and the client computer, client-side caching may also allow offline access to objects. For example, if the client-side caching implements persistent caches, objects that have been cached may be available to a user on the client computer when the client computer is not connected to the server computer. The number of objects that can be stored in the persistent cache depends on the size of the cache. Typically, the cache is a certain percentage of the disk space or may be a fixed size. Once the cache becomes full, some of the objects stored in the cache are removed (i.e., evicted) in order to provide cache space for the new objects.
Currently, objects are evicted based on the time when the object was last accessed. Thus, objects that have been accessed most recently are kept in the cache and objects that have the longest time since being assessed are evicted. Objects are evicted until there is sufficient cache space available. For some implementations, users may specifically request that an object always remains in the cache, commonly referred to as “pinning”. These “pinned” objects are not evicted from the cache. In some cases, the “pinned” objects may be stored separately from the cache, such as in user space.
Until the present invention, a more sophisticated method for managing and evicting objects from the cache has eluded those skilled in the art.